In computing environments, executing programs comprise one or more threads of execution that perform various tasks. In the performance of such tasks, the threads may utilize resources and invoke functions stored outside the context of the thread, such as resources and functions exposed by other threads and methods exposed by programming libraries. The computing environment must therefore manage the concurrent and/or cooperative operation of the threads comprising the program and other threads provided by other threads and by the operating system.